/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.cemaden.smp.controler;

import br.gov.cemaden.library.model.smp.MemoriaAplic;
import java.io.Serializable;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;

/**
 *
 * @author Simone Santos
 */
public class MemoriaAplicBean implements Serializable {

    MemoriaAplic mem = new MemoriaAplic();

    public MemoriaAplicBean() {
    }

    public MemoriaAplic get(MemoryMXBean remoteMemory) {
        MemoryUsage heap = remoteMemory.getHeapMemoryUsage();
        MemoryUsage nheap = remoteMemory.getNonHeapMemoryUsage();

        //converte de long para MB e arredonda   
        double hInit = Math.round(((heap.getInit() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double hUsed = Math.round(((heap.getUsed() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double hCommitted = Math.round(((heap.getCommitted() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double hMax = Math.round(((heap.getMax() / 1024.0) / 1024.0) * 100.0) / 100.0;

        double initPermGen = Math.round(((nheap.getInit() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double usedPermGen = Math.round(((nheap.getUsed() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double committedPermGen = Math.round(((nheap.getCommitted() / 1024.0) / 1024.0) * 100.0) / 100.0;
        double maxPermGen = Math.round(((nheap.getMax() / 1024.0) / 1024.0) * 100.0) / 100.0;

        mem.setHeapInit(hInit);
        mem.setHeapUsed(hUsed);
        mem.setHeapCommitted(hCommitted);
        mem.setHeapMax(hMax);

        mem.setPermGenInit(initPermGen);
        mem.setPermGenUsed(usedPermGen);
        mem.setPermGenCommitted(committedPermGen);
        mem.setPermGenMax(maxPermGen);

        return mem;
    }

    public void show(MemoriaAplic t) {

        String separator = "--------------------------------";

        System.out.printf("Memoria Heap%nHeap Init: %f%nHeap Used: %f%nHeap Committed: %f%nHeap Max: %f%n%s%n",
                t.getHeapInit(), t.getHeapUsed(), t.getHeapCommitted(), t.getHeapMax(), separator);
        System.out.printf("Memoria Perm Gen%nInit PermGen: %f%nUsed PermGen: %f%nCommitted PermGen: %f%nMax PermGen: %f%n%s%n", t.getPermGenInit(), t.getPermGenUsed(), t.getPermGenCommitted(), t.getPermGenMax(), separator);
    }
}
